package com.kymatrix.mpo.plus.bpm.server.service;

import com.kymatrix.mpo.plus.bpm.server.model.entity.definition.BpmUserGroupEntity;
import com.kymatrix.mpo.plus.bpm.server.model.form.group.PageQueryBpmUserGroupReq;
import com.kymatrix.mpo.plus.bpm.server.model.form.group.SaveBpmUserGroupReq;
import com.kymatrix.mpo.plus.bpm.server.model.form.group.UpdateBpmUserGroupReq;
import com.kymatrix.mpo.plus.common.business.common.PageResp;
import java.util.Collection;
import java.util.List;
import javax.validation.Valid;

/**
 * 用户组 Service 接口
 */
public interface BpmUserGroupService {

    /**
     * 创建用户组
     * @return 编号
     */
    String createUserGroup(@Valid SaveBpmUserGroupReq req);

    /**
     * 更新用户组
     *
     * @param updateReqVO 更新信息
     */
    void updateUserGroup(@Valid UpdateBpmUserGroupReq updateReqVO);

    /**
     * 删除用户组
     *
     * @param id 编号
     */
    void deleteUserGroup(String id);

    /**
     * 获得用户组
     *
     * @param id 编号
     * @return 用户组
     */
    BpmUserGroupEntity getUserGroup(String id);

    /**
     * 获得用户组列表
     *
     * @param ids 编号
     * @return 用户组列表
     */
    List<BpmUserGroupEntity> getUserGroupList(Collection<String> ids);

    /**
     * 获得指定状态的用户组列表
     *
     * @param status 状态
     * @return 用户组列表
     */
    List<BpmUserGroupEntity> getUserGroupListByStatus(String status);

    /**
     * 获得用户组分页
     *
     * @param req 分页查询
     * @return 用户组分页
     */
    PageResp<BpmUserGroupEntity> getUserGroupPage(PageQueryBpmUserGroupReq req);

    /**
     * 校验用户组们是否有效。如下情况，视为无效：
     * 1. 用户组编号不存在
     * 2. 用户组被禁用
     *
     * @param ids 用户组编号数组
     */
    void validUserGroups(Collection<String> ids);

}
